package org.com.springcaptcha.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import com.fasterxml.jackson.databind.annotation.JsonAppend;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.com.springcaptcha.CaptchaProperties;
import org.com.springcaptcha.constants.CaptchaConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.Date;

@RequestMapping("/captcha")
@RestController
public class CaptchaController {
    //设置图片的有效时间:1分钟
    public long captcha_time = 60*1000;
//    //获取验证码图片：
//    @RequestMapping("/get")
//    public void getCaptcha(HttpServletResponse response, HttpSession session){
//        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
//        try {
//            //将验证码图片写入到返回结果中：
//            lineCaptcha.write(response.getOutputStream());
//            //存储当前用户信息
//            session.setAttribute(CaptchaConstants.SESSION_CAPTCHA_KEY,lineCaptcha.getCode());
//            //设置验证码的有效时间 存储生成验证码的起始时间到session中：
//            session.setAttribute(CaptchaConstants.SESSION_CAPTCHA_DATA,new Date());
//        } catch (IOException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    @RequestMapping("/check")
//    public boolean check(String inputCode,HttpSession session){
//        if(!StringUtils.hasLength(inputCode)) {
//            return false;
//        }
//        //验证图片的是否超时：
//        long startTime = (long) session.getAttribute(CaptchaConstants.SESSION_CAPTCHA_DATA);
//        if(System.currentTimeMillis()-startTime>captcha_time){
//            return false;
//        }
//        //判断用户输入是否正确：
//        String saved = (String) session.getAttribute(CaptchaConstants.SESSION_CAPTCHA_KEY);
//        if(!saved.equalsIgnoreCase(inputCode)){
//            return false;
//        }
//        return  true;
//    }

    /**
     * 通过配置文件的方式实现：
     */
    @Autowired
    private CaptchaProperties captchaProperties;

    //获取验证码图片：
    @RequestMapping("/get")
    public void getCaptcha(HttpServletResponse response, HttpSession session){
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captchaProperties.getWidth(), captchaProperties.getHeight());
        try {
            //将验证码图片写入到返回结果中：
            lineCaptcha.write(response.getOutputStream());
            //存储当前用户信息
            session.setAttribute(captchaProperties.getSession().getKey(),lineCaptcha.getCode());
            //设置验证码的有效时间 存储生成验证码的起始时间到session中：
            session.setAttribute(captchaProperties.getSession().getTime(),System.currentTimeMillis());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @RequestMapping("/check")
    public boolean check(String inputCode,HttpSession session){
        if(!StringUtils.hasLength(inputCode)) {
            return false;
        }
        //验证图片的是否超时：
        long startTime = (long) session.getAttribute(captchaProperties.getSession().getTime());
        if(System.currentTimeMillis()-startTime>captcha_time){
            return false;
        }
        //判断用户输入是否正确：
        String saved = (String) session.getAttribute(captchaProperties.getSession().getKey());
        if(!saved.equalsIgnoreCase(inputCode)){
            return false;
        }
        return  true;
    }
}
